Intermediate rendering surfaces are employed to render complex web pages (e.g., HTML pages) that use visual effects/properties such as blurring and opacity. The quantity and sizes of surfaces and corresponding amount of memory utilized to create a web page can be quite large. In a traditional approach, surfaces were created on demand and destroyed as needed after being used to free up memory. Although memory is saved with this approach, a considerable amount of time and processing power is consumed by frequently creating and destroying the surfaces that are stored on a GPU. In another traditional approach, a simple fixed size cache was employed for creating surfaces. In this approach, the cache was cleared by destroying surfaces on a rolling basis using basic algorithms like first in first out, least recently used, or closest match. The fixed size cache approach, however, limits flexibility to change the cache size as needed and fails to reuse surfaces to make efficient use of memory space and processing power.